#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import os ,sys ,serial,time

N=100 #显示的点数
y = [0] *N
y2 =[0] *N
x = [0] *N 
 
idx = 0
extCnt = 0  #判断串口是否有数据发来，当连续多次没有数据发来则认为数据已经发送完毕
try:
    timex=0.2 #超时设置,None：永远等待操作，0为立即返回请求结果，其他值为等待超时时间(单位为秒）
    ser=serial.Serial("COM37",115200,timeout=timex) #打开串口
    data = 0
    while idx < 1000 :
        data=ser.readline() #读取串口数据 直至遇到 \n,否则阻塞
        data=data.decode().strip() #去掉 /r /n
        #data=data.replace(' ','') 
        #print(data) #打印处理后的数据
        if len(data) == 0:
            extCnt = extCnt +1
            if extCnt > 10:
                print("长时间没收到数据！自动退出！")
                break  
            continue  
        extCnt = 0
        y.insert(len(y), float(data)) #将数据左移，实现横坐标维持点数不变
        y.remove(y[0])

        y2.insert(len(y2), -1*float(data)) #将数据左移，实现横坐标维持点数不变
        y2.remove(y2[0])

        x.insert(len(x), float(idx))
        x.remove(x[0])
        idx +=1
        # 显示时间
        plt.pause(0.001)
        # 清除上一次显示
        plt.cla()
        plt.title("uart debug") #图标题
        plt.xlabel("x")  #x标签
        plt.ylabel("y")  #y标签
        plt.grid()  # 生成网格
        plt.plot(x,y,label="AD值")
        plt.plot(x,y2,color="r",label="相反数")
    ser.close() #关闭串口 
    plt.draw() 
except Exception as e :
    print("异常")
    ser.close() #关闭串口 异常退出时自动关闭串口